package com.mk.seckill.utils;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Component;



/**
 * MD5工具类
 * 乐字节：专注线上IT培训
 * 答疑老师微信：lezijie
 *
 * @author zhoubin
 * @since 1.0.0
 */
@Component
public class MD5Util {

	public static String md5(String src){
		/**
		 * @Author hhwu
		 * @Description //TODO 返回MD5加密结果
		 * @Date 17:00 2022/6/6
		 * @Param [src]
		 * @return java.lang.String
		 **/
		return DigestUtils.md5Hex(src);
	}

	private static final String salt="1a2b3c4d";// 固定salt，和前端的一致,因此必须是固定的


	public static String inputPassToFromPass(String inputPass){
		/**
		 * @Author hhwu
		 * @Description //TODO 对密码的第一次加密（和前端加密的方法一致）
		 * @Date 17:02 2022/6/6
		 * @Param [inputPass]
		 * @return java.lang.String
		 **/
		String str = "" +salt.charAt(0)+salt.charAt(2)+inputPass+salt.charAt(5)+salt.charAt(4);
		return md5(str);
	}

	public static String formPassToDBPass(String formPass,String salt){
		/**
		 * @Author hhwu
		 * @Description //TODO 对密码的第二次加密（后端加密），这里的salt应该是随机的，但本项目为了方便，就设置为固定的了
		 * @Date 17:03 2022/6/6
		 * @Param [formPass, salt]
		 * @return java.lang.String
		 **/
		String str = "" +salt.charAt(0)+salt.charAt(2)+formPass+salt.charAt(5)+salt.charAt(4);
		return md5(str);
	}

	public static String inputPassToDBPass(String inputPass,String salt){
		/**
		 * @Author hhwu
		 * @Description //TODO 完整的加密过程，进行2次加密，返回最终要写入数据库的加密结果
		 * @Date 17:06 2022/6/6
		 * @Param [inputPass, salt]
		 * @return java.lang.String
		 **/
		String fromPass = inputPassToFromPass(inputPass);
		String dbPass = formPassToDBPass(fromPass, salt);
		return dbPass;
	}


	public static void main(String[] args) {
		/**
		 * @Author hhwu
		 * @Description //TODO 测试
		 * @Date 17:08 2022/6/6
		 * @Param [args]
		 * @return void
		 **/
		// d3b1294a61a07da9b49b6e22b2cbd7f9
		System.out.println(inputPassToFromPass("000000"));
		System.out.println(formPassToDBPass("00c8373145ce7d7a04b4f73155198178","1a2b3c4d"));
		System.out.println(inputPassToDBPass("000000","1a2b3c4d"));
	}

}